# coding = utf-8
'''
淘女郎核心实现
'''
import re
import time
import requests
from bs4 import BeautifulSoup
import urllib
from selenium import webdriver
from selenium.webdriver.chrome.options import Options
from conf import const
from util.util import *

class TaoGirl(object):
    def __init__(self):
        chrome_options = Options()
        chrome_options.add_argument('--headless')
        chrome_options.add_argument('--disable-gpu')
        self.driver = webdriver.Chrome(executable_path = const.BROWSER_PATH,chrome_options=chrome_options)
        self.homePage = const.HOME_PAGE
        self.outputDir = const.OUTPUT_DIR
    
    def get_all_data(self):
        '''
        获取所有的信息
        '''
        #访问主页
        self.driver.get(self.homePage)
        #因为有些网页是动态加载的，用户滑动到哪里加载到哪里
        self.driver.execute_script(const.SCROLL_JS) #执行JS脚本，这个脚本主要是滚动页面到最下面
        time.sleep(3) #等待网页加载完毕
        #self.driver.get_screenshot_as_file(const.SCREEN_DIR + 'screen.png') #保存网页截图
        #使用BeautifulSoup解析网页源码，使用的是html5lib,如果不安装这个库，会报错
        bs = BeautifulSoup(self.driver.page_source,"html5lib")
        allItem = bs.findAll(class_="anchor-card")
        for item in allItem:
            detail_url = item.find(class_='anchor-profile-info')['href'] # 获取个人主页链接
            # 获取封面头像
            header_img_url = item.find(class_='ice-img sharp anchor-avatar').find('img')['src']
            dir_name = self.outputDir + item.find(class_='anchor-name').get_text()
            # 创建目录
            mkdir(self.outputDir)
            mkdir(dir_name)
            if not detail_url.startswith("http"):
                detail_url = "https:"+detail_url
            if not header_img_url.startswith("http"):
                header_img_url = "https:"+header_img_url
            
            # 将头像存入目录
            if not isExists(dir_name+'/0.jpg'):
                urllib.request.urlretrieve(header_img_url,dir_name+'/0.jpg')
            
            # 获取详细主页中的图片
            self.get_detail_imgs(detail_url,dir_name)
        
        # 关闭driver
        self.driver.close()

    def get_detail_imgs(self,detail_url,dir_name):
        '''
        获取主页中的图片
        '''
        num = 0 # 计数器，用于统计页面上的图片，作为图片名字
        self.driver.get(detail_url) # 访问个人主页
        self.driver.execute_script(const.SCROLL_JS) #执行JS脚本，这个脚本主要是滚动页面到最下面
        bs = BeautifulSoup(self.driver.page_source,"html5lib")
        #使用正则表达式匹配所有图片
        allImage = bs.findAll('img',{'src':re.compile('.*img\.alicdn.com\/imgextra\/.*.jpg$')})
        # 进行数据去重
        img_set = set()
        for imge in allImage:
            img_url = imge['src']
            if not img_url.startswith("http"): 
                img_url = "https:" + img_url    #给图片地址加上https：
            img_set.add(img_url)

        for imge_url in img_set:
            num += 1  #计数器+1
            r = requests.get(imge_url)   #使用requests获取图片
            fileName = "{}/{}.jpg".format(dir_name, num)
            #判断是否已经存在这个文件了
            if not isExists(fileName):
                with open(fileName,"wb") as pic:
                    pic.write(r.content)    #不存在的话就保存到文件中










